/*!
 * jQuery File upload Plugin
 * version: 1.0.0
 * @requires jquery.form.js
 * @author 符瑜鑫(Ricky Fu)
 */
/**
 * 文件上传控件封装
 * @author 329202 <a href="mailto:fuyuxin@sf-express.com">符瑜鑫(Ricky Fu)</a>
 * @createDate 2012-07-06
 */
;(function($){
	
	var $file = $('<input type="file" size="1"/>'),
		$text = $('<input type="text" style="border: 1px solid #999;background:#E8E8E8;height:18px;margin-right:3px;padding:1px 3px;" readonly="readonly"/>'),
		$form = $('<form method="post"></form>'),
		$container = $('<span style="position:relative;display:inline-block;height:22px;line-height:22px;z-index:0"></span>'),
		$body = $(document.body), isIE = $.browser.msie;
	
	var submitFile = function($el, op){
		$text.val($file.val().replace(/.+[\\\/]/, ""));
		var hid = [], url = op.url, data = op.param||{}, callback = op.callback;
		for(var p in data) {
			hid.push('<input type="hidden" name="',p,'" value="',data[p],'" />');
		}
		$form.append($file).attr(this.encoding ? 'encoding' : 'enctype', "multipart/form-data");
		if(hid.length) {
			$form.append($(hid.join('')));
		}
//		var y = (ifrm.contentWindow || ifrm.contentDocument);
//		y = y.document ? y.document : y;
		if(isIE) {
			$body.append($form);
		}
		$form.ajaxSubmit({
			url: url,
			dataType: op.dtype||'text',
			success: function(resp){
				if(isIE) {
					$el.after($file);
					$body.remove($form);
				}
				if(callback) {
					callback.call($el, resp);
				}
			},
			error: function(xhr, status, errMsg){
				if(isIE) {
					$el.after($file);
					$body.remove($form);
				}
				alert('upload Error');
			}
		});
	};
	
	/**
	 * options:<pre>
	 * 参数          说明
	 * -----------------------------
	 * url          上传url 
	 * name         上传控件名称,mvc参数名称
	 * param        其它请求参数
	 * width        路径文本框宽度
	 * dtype        回传数据类型(text:'text/plain'; json:'application/json'; xml:'text/xml'; script:'text/javascript')
	 * showPath     是否显示选择的文件名称
	 * callback     回调函数
	 * </pre>
	 */
	$.fn.upload = function(options){
		var op = $.extend({}, options), $el = $(this), w = $el.width(),
			zIdx = $el.css('z-index'), claF;
			
		zIdx = /\d+/.test(zIdx) ? parseInt(zIdx) : 0;
		claF = $.extend({
			'position': 'absolute',
			'top': '0px',
			'opacity': '0',
			'filter': 'alpha(opacity=0)',
			'-moz-opacity': '0',
//			'border-top': '1px solid blue',
//			'border-bottom': '1px solid blue',
			'z-index': zIdx+1
		}, isIE ? {
			'width': w,
			'height': '24px',
			'cursor': 'pointer',
			'margin-left': -1*w
		} : {
			'width': '0px',
			'height': '22px',
			'display': 'none'
		});
		
		$el.css({
			'z-index': zIdx,
//			'border-left': '1px solid red',
//			'border-right': '1px solid red',
			'width': '50px',
			'height': '20px',
			'cursor': 'pointer',
			'line-height': '20px',
			'padding': '1px 3px',
			'display': 'inline-block',
			'text-decoration': 'none',
			'vertical-align': 'middle'
		}).wrap($container).after($file.attr('name', op.name).css(claF)).text('浏览...').bind('click', function(e){
			e.preventDefault();
			if(!isIE){
				$file.trigger('click');
			}
		});
		if(op.showPath !== false) {
			$el.before($text.css({
				'z-index': zIdx+2,
				'width': op.width||200
			}));
		}
		
		$file.bind('change', function(e){
			submitFile($el, op);
		});
		
	};
    
})(jQuery);